package cn.zhfeat.utils.redis;

import redis.clients.jedis.*;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

public class RedisUtil {
	//非切片链接池  连接一台
	private static JedisPool jedisPool = null;
	//切片连接池  做redis集群
	private static ShardedJedisPool shardedJedisPool =null;
	private static int expire = 60000;

	// 静态代码初始化池配置
	static {
		try {
			Properties props = new Properties();
			props.load(RedisUtil.class.getClassLoader().getResourceAsStream(
                    "conf/local/redis.properties"));
			// 创建jedis池配置实例
			JedisPoolConfig config = new JedisPoolConfig();
			// 设置池配置项值
			config.setMaxTotal(Integer.valueOf(props
					.getProperty("redis.maxActive")));
			config.setMaxIdle(Integer.valueOf(props
					.getProperty("redis.maxIdle")));
			config.setMaxWaitMillis(Long.valueOf(props
					.getProperty("redis.maxWait")));
			config.setTestOnBorrow(Boolean.valueOf(props
					.getProperty("redis.testOnBorrow")));
			config.setTestOnReturn(Boolean.valueOf(props
					.getProperty("redis.testOnReturn")));
			
			// 根据配置实例化jedis池
			jedisPool = new JedisPool(config, props.getProperty("redis.host"),
					Integer.valueOf(props.getProperty("redis.port")), 10000,props.getProperty("redis.pass"));
			List<JedisShardInfo> jdsInfoList =new ArrayList<JedisShardInfo>(1);
			JedisShardInfo info = new JedisShardInfo(props.getProperty("redis.host"),
					Integer.valueOf(props.getProperty("redis.port")));
			jdsInfoList.add(info);
			shardedJedisPool =new ShardedJedisPool(config, jdsInfoList);

		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/** 获得jedis对象 */
	public static Jedis getJedisObject() {
		try {
			if (jedisPool != null) {
				Jedis resource = jedisPool.getResource();
				return resource;
			} else {
				return null;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	/** 获得ShardedJedis对象 */
	public static ShardedJedis getShardedJedisObject(){
		try {
			if (shardedJedisPool != null) {
				ShardedJedis resource = shardedJedisPool.getResource();
				return resource;
			} else {
				return null;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	

	/** 归还jedis对象 */
	public static void recycleJedisOjbect(Jedis jedis) {
		if (jedis != null) {
			jedis.close();
		}
	}
	/** 归还ShardedJedis对象 */
	public static void recycleShardedJedisObject(ShardedJedis shardedJedis){
		if(shardedJedis!=null){
			shardedJedis.close();
		}
	}
//	
//	
//
//	/** 设置过期时间 单位秒 */
//	public static void expire(String key, int seconds) {
//		if (seconds <= 0) {
//			return;
//		}
//		Jedis jedis = getJedisObject();
//		jedis.expire(key, seconds);
//		recycleJedisOjbect(jedis);
//	}
//
//	/** 检查是否过期 */
//	public static boolean checkExpire(String key) {
//		boolean flag = false;
//		Jedis jedis = getJedisObject();
//		flag = jedis.exists(key);
//		recycleJedisOjbect(jedis);
//
//		return flag;
//	}
//
//	/**
//	 * 设置默认过期时间
//	 * 
//	 * @param key
//	 */
//	public static void expire(String key) {
//		expire(key, expire);
//	}
//
//	/**
//	 * 根据key删除数据
//	 * 
//	 * @param key
//	 */
//	public static void deleteByKey(String key) {
//		Jedis jedis = getJedisObject();
//		jedis.del(key);
//		recycleJedisOjbect(jedis);
//	}
//
//	/**
//	 * 
//	 * 测试jedis池方法
//	 * 
//	 * @throws InterruptedException
//	 */
//	public static void main(String[] args) throws InterruptedException {
//		Jedis jedis = getJedisObject();// 获得jedis实例
//		//
//		// // 获取jedis实例后可以对redis服务进行一系列的操作
//		// jedis.set("name1", "zhuxun");
//		// jedis.set("name2", "zhuxun");
//		// jedis.set("name3", "zhuxun");
//		// 设置有效期
//		// jedis.expire("name", 1);
//		// Thread.sleep(5000);
//		long start = System.currentTimeMillis();
//		System.out.println("----------->" + start);
//		System.out.println(jedis.get("1000000"));
//		// System.out.println(result.toString());
//		long old = System.currentTimeMillis();
//		System.out.println("----------->" + old);
//		long time = old - start;
//		System.out.println("耗费时间--------》" + time);
//		// jedis.del("8a6f4a59223c77c5a0f60986a6350bb4");
//		// System.out.println(jedis.del("009b41bc1dfc18ee0aa66a2e998fba4c"));
//		// System.out.println(checkExpire("009b41bc1dfc18ee0aa66a2e998fba4c"));
//		// System.out.println(jedis.get("009b41bc1dfc18ee0aa66a2e998fba4c"));
//		// recycleJedisOjbect(jedis); // 将 获取的jedis实例对象还回池中
//
//		// String token = TokenUtil.generateToken("15201633796");
//		// System.out.println(token);
//
//		// StringOperate("name", "康康");
//	}
//
//	// public static String generateToken(String account) {
//	// String nowTime = System.currentTimeMillis() + "yunhuyi_arttraining";
//	// String token = MD5.encodeString(MD5.encodeString(account + nowTime));
//	//
//	// Jedis jedis = RedisUtil.getJedisObject();
//	// jedis.set(token, account);
//	// jedis.expire(token, ConfigUtil.EXPIRE_TIME);
//	// RedisUtil.recycleJedisOjbect(jedis); // 将 获取的jedis实例对象还回池中
//	//
//	// return token;
//	// }
//
//	public static void StringOperate(String key, String value) {
//		Jedis jedis = getJedisObject();// 获得jedis实例
//		jedis.set(key, value);
//		RedisUtil.recycleJedisOjbect(jedis); // 将 获取的jedis实例对象还回池中
//	}
//
//	/**
//	 * 采用管道方式批量插入redis缓存
//	 * 
//	 * 一百万条数据 采用jedis.set()需要107478ms  采用管道pipe.set（）消耗14275ms
//	 * @param list
//	 */
//	public static void StringPipeline(List<Person> list) {
//		Jedis jedis = getJedisObject();// 获得jedis实例
//		Pipeline pipe = jedis.pipelined();
//		long start_pipe = System.currentTimeMillis();
//		for (int i = 0; i < list.size(); i++) {
//			Person person=list.get(i);
//			String value=GsonTools.createJsonString(person);
//			pipe.set(person.getId()+"", value);
//		}
//		pipe.sync();
//		long end_pipe = System.currentTimeMillis();
//		System.out.println("the pipe total time is:" + (end_pipe - start_pipe));
//	}
	
	/*public static void main(String[] args) {
		String id=RedisStringUtil.getValue("zhfeat"+"218");
		System.out.println(id);
		RedisValueUtil.delKey("zhfeat"+"218");
	}*/
}
